

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Iterator;

public class GerenciadorDeInformacoes {

	private volatile int[][] tabuleiroAtual;

	private volatile int[][] tabuleiroPosterior;

	private volatile int formigaAtomicaX;

	private volatile int formigaAtomicaY;

	private volatile int direcaoDaFormiga = 0;

	// 0 -> norte, 1 -> leste, 2 -> sul e 3 -> oeste

	private PrintStream saida;

	private int impressoes;

	private PrintStream saidaPbm;

	public GerenciadorDeInformacoes(int[][] tabuleiroAtual,
			int formigaAtomicaX, int formigaAtomicaY) {
		this.tabuleiroAtual = tabuleiroAtual;
		this.tabuleiroPosterior = new int[this.tabuleiroAtual.length][this.tabuleiroAtual[0].length];
		
		// copiando a borda
		for (int i = 0; i < this.tabuleiroAtual.length; i++) {
			this.tabuleiroPosterior[i][0] = this.tabuleiroAtual[i][0];
			this.tabuleiroPosterior[i][this.tabuleiroAtual[0].length - 1] = this.tabuleiroAtual[i][this.tabuleiroAtual[0].length - 1];
		}
		for (int j = 0; j < this.tabuleiroAtual[0].length; j++) {
			this.tabuleiroPosterior[0][j] = this.tabuleiroAtual[0][j];
			this.tabuleiroPosterior[this.tabuleiroAtual.length - 1][j] = this.tabuleiroAtual[this.tabuleiroAtual.length - 1][j];
		}
		
		this.formigaAtomicaX = formigaAtomicaX;
		this.formigaAtomicaY = formigaAtomicaY;
		try {
			this.saida = new PrintStream("saida.txt");
			this.saidaPbm = new PrintStream("saida.pbm");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	public int[][] getTabuleiroAtual() {
		return this.tabuleiroAtual;
	}

	public int[][] getTabuleiroPosterior() {
		return this.tabuleiroPosterior;
	}

	public void limpaTabuleiroPosterior() {

	}

	public void avancaTabuleiro() {
		this.tabuleiroAtual = this.tabuleiroPosterior;
		this.tabuleiroPosterior = new int[this.tabuleiroAtual.length][this.tabuleiroAtual[0].length];
//		 copiando a borda
		for (int i = 0; i < this.tabuleiroAtual.length; i++) {
			this.tabuleiroPosterior[i][0] = this.tabuleiroAtual[i][0];
			this.tabuleiroPosterior[i][this.tabuleiroAtual[0].length - 1] = this.tabuleiroAtual[i][this.tabuleiroAtual[0].length - 1];
		}
		for (int j = 0; j < this.tabuleiroAtual[0].length; j++) {
			this.tabuleiroPosterior[0][j] = this.tabuleiroAtual[0][j];
			this.tabuleiroPosterior[this.tabuleiroAtual.length - 1][j] = this.tabuleiroAtual[this.tabuleiroAtual.length - 1][j];
		}
		
	}

	public int getFormigaAtomicaX() {
		return formigaAtomicaX;
	}

	public void setFormigaAtomicaX(int formigaAtomicaX) {
		this.formigaAtomicaX = formigaAtomicaX;
	}

	public int getFormigaAtomicaY() {
		return formigaAtomicaY;
	}

	public void setFormigaAtomicaY(int formigaAtomicaY) {
		this.formigaAtomicaY = formigaAtomicaY;
	}

	public int getDirecaoDaFormiga() {
		return direcaoDaFormiga;
	}

	public void setDirecaoDaFormiga(int direcao) {
		this.direcaoDaFormiga = direcao;
	}

	public void imprimeP1(){
		this.saidaPbm.println("P1");
		this.saidaPbm.println( tabuleiroAtual[0].length+" "+tabuleiroAtual.length );

		for (int y = 0; y < this.tabuleiroAtual.length; y++) {
			for (int x = 0; x < this.tabuleiroAtual[0].length; x++) {
				if (formigaAtomicaY == y && formigaAtomicaX == x) {
					this.saidaPbm.print(1);

				} else if (this.tabuleiroAtual[y][x] == 1) {
					this.saidaPbm.print(1);
				} else {
					this.saidaPbm.print(0);
				}
			}
			this.saidaPbm.println();
		}
	}
	
	public void imprime() {
		this.saida.println();
		// this.saida.println("Tabuleiro " + ++this.impressoes );
		this.saida.println();
		
		for (int y = 0; y < this.tabuleiroAtual.length; y++) {
			for (int x = 0; x < this.tabuleiroAtual[0].length; x++) {
				if (formigaAtomicaY == y && formigaAtomicaX == x) {
					if (this.tabuleiroAtual[y][x] == 1) {
						this.saida.print(" L ");
					} else {
						this.saida.print(" D ");
					}

				} else if (this.tabuleiroAtual[y][x] == 1) {
					this.saida.print(" X ");
				} else {
					this.saida.print(" - ");
				}
			}
			this.saida.println();
		}
	}
}
